home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / UTIL / MEMORY / OLD / MEM208SRC / FSLib / s / interface < prev    next >
Text File  |  1992-10-26  |  5KB  |  171 lines

  1. ; $Id: s.interface 3.1 93/03/09 23:38:13 brian Exp $
  2. r0      RN      0
  3. r1      RN      1
  4. r2      RN      2
  5. r3      RN      3
  6. r4      RN      4
  7. r5      RN      5
  8. r6      RN      6
  9. r7      RN      7
  10. r8      RN      8
  11. r9      RN      9
  12. r10     RN     10
  13. r11     RN     11
  14. r12     RN     12
  15. r13     RN     13
  16. r14     RN     14
  17. r15     RN     15
  18.  
  19. a1      RN      0
  20. a2      RN      1
  21. a3      RN      2
  22. a4      RN      3
  23.  
  24. v1      RN      4
  25. v2      RN      5
  26. v3      RN      6
  27. v4      RN      7
  28. v5      RN      8
  29. v6      RN      9
  30.  
  31. sl      RN     10
  32. fp      RN     11
  33. ip      RN     12
  34. sp      RN     13
  35. lr      RN     14
  36. pc      RN     15
  37.  
  38. C_bit   *       1 :SHL: 29
  39. V_bit   *       1 :SHL: 28
  40.  
  41.         IMPORT  |Image$$RO$$Base|
  42.         IMPORT  |_Lib$Reloc$Off$DP|
  43.         IMPORT  fsentry_open
  44.         IMPORT  fsentry_getbytes
  45.         IMPORT  fsentry_putbytes
  46.         IMPORT  fsentry_args
  47.         IMPORT  fsentry_close
  48.         IMPORT  fsentry_file
  49.         IMPORT  fsentry_func
  50.         IMPORT  fsentry_gbpb
  51.         IMPORT  fsentry_free
  52.  
  53.         EXPORT  veneer_fsentry_open
  54.         EXPORT  veneer_fsentry_getbytes
  55.         EXPORT  veneer_fsentry_putbytes
  56.         EXPORT  veneer_fsentry_args
  57.         EXPORT  veneer_fsentry_close
  58.         EXPORT  veneer_fsentry_file
  59.         EXPORT  veneer_fsentry_func
  60.         EXPORT  veneer_fsentry_gbpb
  61.         EXPORT  veneer_fsentry_free
  62.         EXPORT  Image_RO_Base
  63.  
  64.  
  65.         AREA    FSEntry_Interfaces,REL,CODE,READONLY
  66.  
  67.         LTORG
  68.  
  69. veneer_fsentry_open
  70.         MOV     r8, #fsentry_branchtable - %F10 + 4*0
  71.         B       fsentry_common
  72. veneer_fsentry_getbytes
  73.         MOV     r8, #fsentry_branchtable - %F10 + 4*1
  74.         B       fsentry_common
  75. veneer_fsentry_putbytes
  76.         MOV     r8, #fsentry_branchtable - %F10 + 4*2
  77.         B       fsentry_common
  78. veneer_fsentry_args
  79.         MOV     r8, #fsentry_branchtable - %F10 + 4*3
  80.         B       fsentry_common
  81. veneer_fsentry_close
  82.         MOV     r8, #fsentry_branchtable - %F10 + 4*4
  83.         B       fsentry_common
  84. veneer_fsentry_file
  85.         MOV     r8, #fsentry_branchtable - %F10 + 4*5
  86.         B       fsentry_common
  87. veneer_fsentry_func
  88.         MOV     r8, #fsentry_branchtable - %F10 + 4*6
  89.         B       fsentry_common
  90. veneer_fsentry_gbpb
  91.         MOV     r8, #fsentry_branchtable - %F10 + 4*7
  92.         B       fsentry_common
  93. veneer_fsentry_free
  94.         MOV     r8, #fsentry_branchtable - %F10 + 4*8
  95.         MOV     lr,pc
  96.         TST     lr,#3
  97.         LDMNEFD sp!,{lr}
  98.         BNE     fsentry_common
  99.         SWI     &16     ;OS_EnterOS
  100.         BL      fsentry_common
  101.         MOV     lr,pc
  102.         TEQP    lr,#3
  103.         ANDEQ   r0,r0,r0
  104.         LDMFD   sp!,{pc}
  105.  
  106. fsentry_common  ; os_error *fsentry_common( Parameter_Block * )
  107.  
  108.         ; Store the input registers onto the stack
  109.         STMFD   sp!,{r0-r12,lr}
  110.  
  111.         MOV     sl, sp, LSR #20
  112.         MOV     sl, sl, LSL #20         ; SP_LWM
  113.         LDMIA   sl, {v1, v2}            ; save old reloc modifiers over fn call
  114.         LDR     r12, [r12]              ; private word pointer
  115.         LDMIB   r12, {fp, r12}          ; new relocation modifiers
  116.         STMIA   sl,  {fp, r12}          ; set by module init
  117.         MOV     fp, #0                  ; halt C backtrace here!
  118.  
  119.         ; This is equivalent of 'ADD r10, r10, #0' + |_Lib$Reloc$Off$DP|
  120.         DCD     |_Lib$Reloc$Off$DP| + &E28AA000
  121.  
  122.         ; Pass a pointer to the structure on the stack
  123.         MOV     a1, sp
  124.  
  125.         ; BL    fsentry_branchtable[r8]
  126.         MOV     lr, pc
  127.         ADD     pc, pc, r8
  128.  
  129.         ; This is equivalent of 'SUB r10, r10, #0' + |_Lib$Reloc$Off$DP|
  130.         DCD     |_Lib$Reloc$Off$DP| + &E24AA000
  131.  
  132. 10      ; This label must be the 2nd instructions past the above ADD pc, pc, r8
  133.  
  134.         STMIA   sl, {v1, v2}            ; restore old reloc modifiers
  135.  
  136.         ; Save the returned value in r8
  137.         MOVS    lr, r0
  138.         ; Get the stuff off the stack
  139.         LDMFD   sp!, {r0-r12}
  140.         ; If returned value indicates an error, then set the overflow and put it back in r0
  141.         MOVNE   r0, lr
  142.  
  143.         ; Mess about with the flag bits in lr
  144.         MOV     lr, pc
  145.         BIC     lr, lr, #C_bit + V_bit
  146.         ORRNE   lr, lr, #V_bit          ; V = err != 0
  147.         TST     r1, r1                  ; C = r1 == 0
  148.         ORREQ   lr, lr, #C_bit
  149.  
  150.         ; Move the flag bits into psr
  151.         TEQP    lr, #0
  152.         LDMFD   sp!,{pc}
  153.  
  154. fsentry_branchtable
  155.         B       fsentry_open
  156.         B       fsentry_getbytes
  157.         B       fsentry_putbytes
  158.         B       fsentry_args
  159.         B       fsentry_close
  160.         B       fsentry_file
  161.         B       fsentry_func
  162.         B       fsentry_gbpb
  163.         B       fsentry_free
  164.  
  165. ; Give RM base address to C program
  166.  
  167.         AREA    Code_Description, DATA, REL
  168. Image_RO_Base   DCD     |Image$$RO$$Base|
  169.  
  170.         END
  171.